<?php

//include_once '../logica/session.php';
//Clase Acceso a Datos
class AccesoDatos {

    //Campos de la clase
    private $conexion;
    private $ipServidor;
    private $usuario;
    private $contrasenia;
    private $baseDeDatos;
    private $resultados;
    private $mensaje;
    private $registrosLeidos;
    private $numeroDeError;

    //Constructor de la clase
    function __construct() {

        /**
         * Conexion al servidor demo new derma
         */     
//        $this->ipServidor = "72.32.1.172";
//        $this->usuario = "387260_newderma";
//        $this->contrasenia = "s3f5dcGt";
//        $this->baseDeDatos = "387260_newderma";

        
        /**
         * Conexion al servidor demo echosoft
         */
//        $this->ipServidor = "mysql50-94.wc1.dfw1.stabletransit.com";
//        $this->usuario = "387260_echosoft";
//        $this->contrasenia = "Echosoft1";
//        $this->baseDeDatos = "387260_echosoft";

        /**
         * Conexion Local
         */
        $this->ipServidor = "localhost";
        $this->usuario = "root";
        $this->contrasenia = "Azul1956";
        $this->baseDeDatos = "eme";

        $this->conexion = false;
        $this->registrosLeidos = 0;
        $this->resultados = array();
        $this->mensaje = "";
    }

    //Destructor de la clase Acceso a Datos
    function __destruct() {
        $this->liberaResultado();
        $this->cierraConexion();
    }

    //Abre la conexión con el servidor de base de datos. Devuelve falso si hubo error
    public function abrirConexion() {
        $estadoDeConexion = true;
        $this->conexion = @mysql_connect($this->ipServidor, $this->usuario, $this->contrasenia, true, 65536);
        if (mysql_select_db($this->baseDeDatos, $this->conexion)) {
            mysql_query("SET NAMES 'utf8'", $this->conexion);
            $estadoDeConexion = true;
        } else {
            $estadoDeConexion = false;
            $this->estableceError(mysql_errno() . " -> " . mysql_error());
        }
        return $estadoDeConexion;
    }

    //Establece el mensaje de error e inicializa los contadores de resultados
    private function estableceError($tipo) {
        $this->registrosLeidos = 0;
        $this->mensaje = "Error:" . $tipo;
    }

    /**
     * Ejecuta querys sencillos
     */
    public function ejecutarConsultaSencilla($sql, $idResultado = "") {
        $this->abrirConexion();
        $estado = true;
        if ($this->conexion) {
            $r = mysql_query($sql, $this->conexion);
            if (mysql_errno() > 0) {
                $this->estableceError(mysql_errno());
                $estado = false;
            }
            else
                $this->registrosLeidos = mysql_num_rows($r);
            if ($idResultado == "")
                $this->resultados[0] = $r;
            else
                $this->resultados[$idResultado] = $r;
        }
        else {
            $this->estableceError(mysql_errno() . " -> " . mysql_error());
            $estado = false;
        }
        $this->cierraConexion();
        return $estado;
    }

    /**
     * Ejecuta procedimientos almacenados sin Campos de auditoria 
     */
    public function ejecutarConsulta($sql, $idResultado = "") {
        $this->abrirConexion();
        $estado = true;
        if ($this->conexion) {
            $sql = "call " . $sql . "')";
            $r = mysql_query($sql, $this->conexion);
            if (mysql_errno() > 0) {
                $this->estableceError(mysql_errno() . " -> " . mysql_error());
                $estado = false;
            }
            else
                $this->registrosLeidos = mysql_num_rows($r);
            if ($idResultado == "")
                $this->resultados[0] = $r;
            else
                $this->resultados[$idResultado] = $r;
        }
        else {
            $this->estableceError(mysql_errno() . " -> " . mysql_error());
            $estado = false;
        }
        $this->cierraConexion();
        return $estado;
    }

    /**
     * Ejecuta procedimientos almacenados sin Campos de auditoria 
     */
    public function ejecutarTransaccion($sql, $idResultado = "") {
        $this->abrirConexion();
        $estado = true;
        if ($this->conexion) {
            $sql = "call " . $sql . "')";
            $r = mysql_query($sql, $this->conexion);
            sleep(1);
            if (mysql_errno() > 0) {
                $this->estableceError(mysql_errno() . " -> " . mysql_error());
                $estado = false;
            }
            else
                $this->registrosLeidos = mysql_num_rows($r);
            if ($idResultado == "")
                $this->resultados[0] = $r;
            else
                $this->resultados[$idResultado] = $r;
        }
        else {
            $this->estableceError(mysql_errno() . " -> " . mysql_error());
            $estado = false;
        }
        $this->cierraConexion();
        return $estado;
    }

    /**
     * Ejecuta procedimientos almacenados de insercion o modificacion
     */
    public function ejecutarPA($sql, $idResultado = "") {
        $this->abrirConexion();
        $estado = true;
        if ($this->conexion) {
            $sql = "call " . $sql . "','" . $_SESSION['IdUsuario'] . "')";


            $r = mysql_query($sql, $this->conexion);
            if (mysql_errno() > 0) {
                $this->estableceError(mysql_errno());
                $estado = false;
            }
            else
                $this->registrosLeidos = mysql_num_rows($r);
            if ($idResultado == "")
                $this->resultados[0] = $r;
            else
                $this->resultados[$idResultado] = $r;
        }
        else {
            $this->estableceError(mysql_errno());
            $estado = false;
        }
        $this->cierraConexion();
        return $estado;
    }

    //Borra él o los registros de una tabla que cumplan los parámetros recibidos
    public function ejecutarEliminar($sql) {
        $this->abrirConexion();
        $estado = true;
        if ($this->conexion) {
            mysql_query($sql, $this->conexion);
            if ($this->numeroDeError == mysql_errno() > 0) {
                $this->estableceError(mysql_errno());
                $estado = false;
            }
        } else {
            $this->estableceError(mysql_errno());
            $estado = false;
        }
        $this->cierraConexion();
        return $estado;
    }

    //Inserta un registro en la tabla específicada utilizando como valores el arreglo de datos recibido
    public function ejecutarInsertar($sql) {
        $this->abrirConexion();
        if ($this->conexion) {
            mysql_query($sql, $this->conexion);
            if (mysql_errno($this->conexion) > 0)
                $this->estableceError(mysql_errno());
            return mysql_affected_rows($this->conexion);
        }
        else {
            $this->estableceError(mysql_errno());
            return 0;
        }
        $this->cierraConexion();
    }

    //Actualiza el registro de una tabla utilizando los párametors recibidos
    public function ejecutarActualizar($sql) {
        $this->abrirConexion();
        if ($this->conexion) {
            mysql_query($sql, $this->conexion);
            if (mysql_errno($this->conexion) > 0)
                $this->estableceError(mysql_errno());
            return mysql_affected_rows($this->conexion);
        }
        else {
            $this->estableceError(mysql_errno());
            return 0;
        }
        $this->cierraConexion();
    }

    //Regresa el contenido de un registro del resultado en un arreglo
    public function devuelveArreglo($idResultado = "") {
        if ($idResultado == "")
            $idResultado = 0;
        if ($this->resultados[$idResultado])
            return mysql_fetch_assoc($this->resultados[$idResultado]);
        else
            return false;
    }

    //Regresa el contenido de un registro del resultado en un arreglo
    public function devuelveConsulta($idResultado = "") {
        if ($idResultado == "")
            $idResultado = 0;
        if ($this->resultados[$idResultado])
            return $this->resultados[$idResultado];
        else
            return false;
    }

    //Devuelve el número de registros leidos por la última consulta
    public function devuelveRegsLeidos() {
        return $this->registrosLeidos;
    }

    //Devuelve el utimo mensaje de error generado
    public function devuelveError() {
        return $this->mensaje;
    }

    //Libera de la memoria del servidor el resultado de cualquier consulta realizada
    public function liberaResultado() {
        foreach ($this->resultados as $llave => $r) {
            if ($this->resultados[$llave])
                mysql_free_result($this->resultados[$llave]);
        }
        $this->resultados = array();
    }

    //Cierra la conexión con el servidor de base de datos
    public function cierraConexion() {
        if ($this->conexion) {
            mysql_close($this->conexion);
            $this->conexion = false;
        }
    }

}

?>
